package com.zengde.ai_sandbox.config;

import com.hankcs.hanlp.HanLP;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import java.io.File;
import java.nio.file.Paths;
import java.lang.reflect.Field;

/**
 * HanLP配置类
 */
@Configuration
@Slf4j
public class HanlpConfig {

    @Value("${java.io.tmpdir}")
    private String tempDir;

    @PostConstruct
    public void init() {
        try {
            // 设置HanLP数据目录为系统临时目录下的hanlp_data
            String hanlpDataPath = Paths.get(tempDir, "hanlp_data").toString();
            File hanlpDir = new File(hanlpDataPath);
            
            // 确保目录存在
            if (!hanlpDir.exists()) {
                boolean created = hanlpDir.mkdirs();
                if (created) {
                    log.info("已创建HanLP数据目录: {}", hanlpDataPath);
                } else {
                    log.warn("无法创建HanLP数据目录: {}", hanlpDataPath);
                }
            }
            
            // 设置HanLP配置
            System.setProperty("hanlp.root", hanlpDataPath);
            
            // 使用反射设置配置，以适应不同版本的HanLP
            try {
                Field rootDirField = HanLP.Config.class.getDeclaredField("ROOT");
                rootDirField.setAccessible(true);
                rootDirField.set(null, hanlpDataPath);
                log.info("已设置HanLP数据目录: {}", hanlpDataPath);
            } catch (NoSuchFieldException e) {
                try {
                    // 尝试其他可能的字段名
                    Field rootDirField = HanLP.Config.class.getDeclaredField("root");
                    rootDirField.setAccessible(true);
                    rootDirField.set(null, hanlpDataPath);
                    log.info("已设置HanLP数据目录: {}", hanlpDataPath);
                } catch (NoSuchFieldException ex) {
                    log.warn("无法通过反射设置HanLP数据目录，将使用系统属性");
                }
            }
            
            // 通过反射获取当前配置的数据目录
            try {
                Field[] fields = HanLP.Config.class.getDeclaredFields();
                for (Field field : fields) {
                    field.setAccessible(true);
                    log.debug("HanLP配置字段: {} = {}", field.getName(), field.get(null));
                }
            } catch (Exception e) {
                log.warn("无法获取HanLP配置信息: {}", e.getMessage());
            }
            
            log.info("HanLP配置完成");
        } catch (Exception e) {
            log.error("HanLP配置失败: {}", e.getMessage(), e);
        }
    }
} 